package com.elitesland.org.vo;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.List;
import java.util.Optional;

/**
 * @author mir
 */
@Data
@Accessors(chain = true)
public class EmployeeVO implements Serializable {
    private static final long serialVersionUID = 4204995330332829683L;

    @ApiModelProperty("记录ID")
    @JsonSerialize(using = ToStringSerializer.class)
    Long id;

    @ApiModelProperty(value = "雇员编号")
    String empNo;

    @ApiModelProperty(value = "雇员姓名")
    String name;

    @ApiModelProperty(value = "雇员外文名")
    String foreignName;

    @ApiModelProperty("所属公司ID")
    @JsonSerialize(using = ToStringSerializer.class)
    Long ouId;

    @ApiModelProperty(value = "所属部门ID")
    @JsonSerialize(using = ToStringSerializer.class)
    Long buId;

    @ApiModelProperty(value = "汇报雇员记录ID")
    Long reportToId;

    @ApiModelProperty(value = "汇报ID路径")
    String reportToPath;

    @ApiModelProperty("岗位记录ID")
    @JsonSerialize(using = ToStringSerializer.class)
    Long postId;

    @ApiModelProperty("岗位名称")
    String postName;

    @ApiModelProperty("岗位权重")
    Double postWeight;

    @ApiModelProperty(value = "行政职位, [UDC]ORG:TITLE")
    String title;

    @ApiModelProperty(value = "系统用户ID")
    @JsonSerialize(using = ToStringSerializer.class)
    Long sysUserId;

    @ApiModelProperty(value = "系统用户账号")
    String sysUserName;

    @ApiModelProperty(value = "工作邮箱")
    String email;

    @ApiModelProperty(value = "工作手机号")
    String mobile;

    @ApiModelProperty("雇员隶属公司")
    Optional<OrgOuVO> ou;

    @ApiModelProperty("雇员隶属BU")
    Optional<OrgBuVO> bu;

    @ApiModelProperty("雇员关联公司记录ID列表")
    List<Long> ouIds;

    @ApiModelProperty("雇员关联BU记录ID列表")
    List<Long> buIds;

    @ApiModelProperty("雇员标签列表")
    List<String> tags;

    @ApiModelProperty("雇员标签名")
    String tagName;
}
